有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在MATLAB中生成java格式的矩阵

我在MATLAB中有一个代码,它在最后给了我一个矩阵。我需要将这个矩阵带到Java并在那里使用它,但是当矩阵很大时,在Java中很难逐个元素重写它。因此,我在MATLAB中编写了以下代码:

function JavaMatrix = generateJavaFormatedMatrix(matrix, name) 
    for i=1:size(matrix,1)
        for j=1:size(matrix,2)
            JavaMatrix(i,j) = char([name '[' num2str(i-1) ']' '[' num2str(j-1) ']=' num2str(matrix(i,j)) ';' ' '])
        end
    end
end

我希望它能帮我做到这一点,然后我只需要复制数组并将其粘贴到Java中。例如,当我编写以下命令时,我希望上面的代码执行什么操作:

java_matrix = generateJavaFormatedMatrix(eye(3),'A')

以下是

A[0][0]=1; A[0][1]=0; A[0][2]=0;
A[1][0]=0; A[1][1]=1; A[1][2]=0;
A[2][0]=0; A[2][1]=0; A[2][2]=1;

但是,我得到的是以下错误:

Subscripted assignment dimension mismatch.

Error in generateJavaFormatedMatrix (line 5)
            JavaMatrix(i,j) = char([name '[' num2str(i-1) ']' '[' num2str(j-1) ']=' num2str(matrix(i,j)) ';' ' '])

非常感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    这里有一个代码可以实现这一点

    function s = generateJavaFormatedMatrix( A, sigdigs, name )
    if nargin < 2
        sigdigs = 15;
    end
    format  = [ '%+1.', int2str(sigdigs), 'e' ]; 
    s       = sprintf( 'final double [][] %s = {\n', name ); 
    for row = 1:size(A,1)
        s   = [ s, '    { ' ];
        for col = 1:size(A,2)
            s   = [ s, num2str( A(row,col), format ) ];
            if ( col ~= size(A,2) )
                s   = [ s, ', ' ];
            end
        end
        if row == size(A,1)
            s   = sprintf( [ s, ' } \n' ] );
        else 
            s   = sprintf( [ s, ' }, \n' ] );
        end
    end
    s   = [ s, '};' ];
    

    例如,运行这个命令

    >> generateJavaFormatedMatrix( eye(3), 3, 'A' ):
    

    将提供:

    ans =
    
    final double [][] A = {
        { +1.000e+00, +0.000e+00, +0.000e+00 }, 
        { +0.000e+00, +1.000e+00, +0.000e+00 }, 
        { +0.000e+00, +0.000e+00, +1.000e+00 } 
    };